package cn.heycm.blog.common.utils;

import cn.heycm.blog.common.entity.error.ServiceException;
import cn.heycm.blog.common.entity.result.CodeMsg;
import cn.heycm.blog.common.entity.result.Result;

/**
 * 断言
 *
 * @author hey
 * @version 1.0
 * @since 2024/9/15 16:16
 */
public class Assert {

    private Assert() {}

    public static void isTrue(boolean expression, String msg) {
        if (!expression) {
            throw new ServiceException(msg);
        }
    }

    public static void isTrue(boolean expression, CodeMsg codeMsg) {
        if (!expression) {
            throw new ServiceException(codeMsg);
        }
    }

    public static void isTrue(boolean expression, int code, String msg) {
        if (!expression) {
            throw new ServiceException(code, msg);
        }
    }

    public static void notNull(Object object, String msg) {
        Assert.isTrue(object != null, msg);
    }

    public static void notNull(Object object, CodeMsg codeMsg) {
        Assert.isTrue(object != null, codeMsg);
    }

    public static void notEmpty(String str, String msg) {
        Assert.isTrue(str != null && !str.isBlank(), msg);
    }

    public static void notEmpty(String str, CodeMsg codeMsg) {
        Assert.isTrue(str != null && !str.isBlank(), codeMsg);
    }

    public static void isNull(Object object, String msg) {
        Assert.isTrue(object == null, msg);
    }

    public static void isNull(Object object, CodeMsg codeMsg) {
        Assert.isTrue(object == null, codeMsg);
    }

    public static void isEmpty(String str, String msg) {
        Assert.isTrue(str == null || str.isBlank(), msg);
    }

    public static void isEmpty(String str, CodeMsg codeMsg) {
        Assert.isTrue(str == null || str.isBlank(), codeMsg);
    }

    public static <T> void require(Result<T> result) {
        Assert.isTrue(result.isSuccess(), result.getCode(), result.getMsg());
    }

}
